package ca.etsmtl.log660.servlet;

import java.sql.Date;
import java.util.List;

import org.hibernate.Session;

import ca.etsmtl.log660.configuration.SessionFactoryHelper;
import ca.etsmtl.log660.entity.Client;
import ca.etsmtl.log660.entity.Film;
import ca.etsmtl.log660.entity.Inventaire;
import ca.etsmtl.log660.entity.Location;
import ca.etsmtl.log660.entity.Personne;

public class FilmControler {

	public FilmControler(){}
	
	/**
	 * Fait la location d'un film
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public String louerFilm(){
		Client client=Controler.getControler().getClientCourant();
		Film film=Controler.getControler().getFilmCourant();
		
		 Session uneSession = SessionFactoryHelper.getSessionFactory().getCurrentSession();
	     uneSession.beginTransaction();
		List<Client> list=uneSession.createQuery("FROM Client WHERE clientId = "+client.getClientId()).list();
		 client=list.get(0);
	     
		 int nbLocationMax = client.getForfait().getNbLocationsMax();

	        List<Location> listLocation = uneSession.createQuery("FROM Location where client = :client").setParameter("client", client).list();

	        int copiesDispo = 0;
	        for(Inventaire inv : film.getInventaires()){
        		if(inv.isDisponible()){
        			copiesDispo++;
        		}
        	}
	        
	        if( copiesDispo < 1){	        	
	             return "Aucune copie disponible.";
	        } else if(listLocation.size() >= nbLocationMax){
	            return "Le client a atteint le nombre de location maximal pour son forfait.";
	        } else {
	            
	            Location location = new Location();
	            
	            java.util.Date today = new java.util.Date();
	            location.setDateEmprunt(new Date(today.getTime()));
	            
	            Date date_retour = new Date(today.getTime()+(86400000*client.getForfait().getDureeMax()));
	            location.setDateExpiration(date_retour);
	            
	            for(Inventaire inv : film.getInventaires()){
	                 if (inv.isDisponible()){
	                     inv.setDisponible(false);
	                     location.setInventaire(inv);
	                     break;
	            	}
	            	
	            }
	            
	            location.setClient(client);
	            
	            uneSession.persist(location);
	            uneSession.getTransaction().commit();
	        }
		return "";
	}
	
	/**
	 * Envoie la personne selectionnee vers la fenetre de detail d'une personne.
	 * @param personne
	 */
	@SuppressWarnings("unchecked")
	public void selectionnerPersonne(Personne personne){
		Session uneSession = SessionFactoryHelper.getSessionFactory().openSession();
		uneSession.beginTransaction();
		
		List<Personne> list=uneSession.createQuery("FROM Personne WHERE personneId = "+personne.getPersonneId()).list();
		Controler.getControler().getSysteme().ouvrirPersonne(list.get(0));
		uneSession.close();
	}
}
